from SeerDm import DmBase
import SeerGlobal
from string import digits#去掉文字中的数字


精灵出招表组 = []
def Get精灵出招表组():
    global 精灵出招表组
    return 精灵出招表组
def Set精灵出招表组(data01):
    global 精灵出招表组
    精灵出招表组 = data01
#---------------------------通用型战斗模块--------------
区域_当前精灵名 = [13,81,108,118]
区域_对方精灵名 = [868,84,965,121]
区域_第一技能 = [159,472,308,558]
区域_第二技能 = [317,474,464,557]
区域_第三技能 = [474,472,619,557]
区域_第四技能 = [627,469,774,558]
区域_第一精灵 = [156,517,248,568]
区域_第二精灵 = [266,525,354,569]
区域_第三精灵 = [364,525,456,568]
区域_第四精灵 = [465,528,561,568]
区域_第五精灵 = [569,531,662,568]
区域_第六精灵 = [667,527,770,569]

class ZhanDou():
    """战斗类"""
    def __init__(self,_dm):
        self.招数ID = 0
        self.dm = _dm
        self.fontColor = "ffffff-000000|fefefe-000000|fafafa-000000|fcfcfc-000000|fdfdfd-000000|fbfbfb-000000"
    
    def setQuYu(self,l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12):
        """设置战斗模块的所有区域，以供新登录器使用，默认小帅猫"""
        区域_当前精灵名 = l1
        区域_对方精灵名 = l2
        区域_第一技能 = l3
        区域_第二技能 = l4
        区域_第三技能 = l5
        区域_第四技能 = l6
        区域_第一精灵 = l7
        区域_第二精灵 = l8
        区域_第三精灵 = l9
        区域_第四精灵 = l10
        区域_第五精灵 = l11
        区域_第六精灵 = l12
    
    def lookMyName(self):
        """查看当前战斗中自己精灵的名字"""
        x1,y1,x2,y2 = 区域_当前精灵名
        _dm: DmBase = self.dm
        当前精灵名 = _dm.ocr(x1,y1,x2,y2,self.fontColor)
        当前精灵名 = 当前精灵名.replace("一", "")#去除一
        return 当前精灵名
    def lookYouName(self):
        """查看当前战斗中敌方精灵的名字"""
        x1,y1,x2,y2 = 区域_对方精灵名
        _dm: DmBase = self.dm
        当前精灵名 = _dm.ocr(x1,y1,x2,y2,self.fontColor)
        当前精灵名 = 当前精灵名.replace("一", "")#去除一
        return 当前精灵名
    
    def lookJiNeng(self):
        """查看当前自己的技能情况"""
        技能列表 = []
        #招数以及剩余PP
        def getJiNengData(JiNeng):
            list03 = []
            x1,y1,x2,y2 = JiNeng
            _dm: DmBase = self.dm
            当前技能名 = _dm.ocr(x1,y1,x2,y2,self.fontColor)
            当前技能名 = 当前技能名.replace("一", "")#去除一
            list01 = 当前技能名.split('次数：')#['落芳天华','0/10']
            try:
                list02 = list01[1].split('/')#['0','10']
            except:
                list03.append('未找到')
                list03.append('10')
                return list03
            list03.append(list01[0])
            list03.append(list02[0])
            return list03#['落芳天华','0']
        
        技能列表.append(getJiNengData(区域_第一技能))
        技能列表.append(getJiNengData(区域_第二技能))
        技能列表.append(getJiNengData(区域_第三技能))
        技能列表.append(getJiNengData(区域_第四技能))#[['落芳天华','0'],['落芳天华','0'],['落芳天华','0'],['落芳天华','0']]
        return 技能列表
    
    def lookJingLing(self):
        """查看自己的六个精灵"""
        精灵列表 = []
        def getJingLingData(JingLing):
            list03 = []
            x1,y1,x2,y2 = JingLing
            _dm: DmBase = self.dm
            当前精灵名 = _dm.ocr(x1,y1,x2,y2,self.fontColor)
            当前精灵名 = 当前精灵名.replace("一", "")#去除一
            list01 = 当前精灵名.split('/')#['972','972圣灵谱尼']
            try:
                res = list01[1].translate(str.maketrans('', '', digits))#去除文字中的数字  '圣灵谱尼'
            except:
                list03.append('未找到')
                list03.append('0')
                return list03
            if(res.find('次数：') != -1 or list01[0].find('次数：') != -1):
                #说明此时没处在切换精灵栏面板
                list03.append('未找到')
                list03.append('0')
                return list03
            list03.append(res)
            list03.append(list01[0])#['圣灵谱尼','972']
            return list03
        
        精灵列表.append(getJingLingData(区域_第一精灵))
        精灵列表.append(getJingLingData(区域_第二精灵))
        精灵列表.append(getJingLingData(区域_第三精灵))
        精灵列表.append(getJingLingData(区域_第四精灵))
        精灵列表.append(getJingLingData(区域_第五精灵))
        精灵列表.append(getJingLingData(区域_第六精灵))
        return 精灵列表
    
    def changeJingLingForName(self,name):
        """更换精灵通过名字"""
        list01 = self.lookJingLing()#查看该精灵存在吗？
        isHave = False#是否满足条件
        int01 = 0
        for i in list01:
            str01 = i[0]#精灵名字
            #print('精灵名：' + str01 + '|' + '输入name：' + name + '|' + '结果：' + str(str01.find(name)))
            if(str01.find(name) != -1):#说明找到了
                if(int(i[1])>0):#该精灵还活着
                    isHave = True
                    break
            int01 = int01 + 1
        if(isHave == False):
            return 0
        def findJingLing(JingLing):
            x1,y1,x2,y2 = JingLing
            _dm: DmBase = self.dm
            dm_ret = _dm.findStrFast(x1,y1,x2,y2,name,self.fontColor)
            if(int(dm_ret[0]) == -1):#说明没找到
                return -1
            _dm.moveTo(int(dm_ret[1]),int(dm_ret[2]))
            _dm.leftClick()
            return dm_ret
        
        if(int01 == 0):
            x01 = findJingLing(区域_第一精灵)
        elif(int01 == 1):
            x01 = findJingLing(区域_第二精灵)
        elif(int01 == 2):
            x01 = findJingLing(区域_第三精灵)
        elif(int01 == 3):
            x01 = findJingLing(区域_第四精灵)
        elif(int01 == 4):
            x01 = findJingLing(区域_第五精灵)
        elif(int01 == 5):
            x01 = findJingLing(区域_第六精灵)
        if(x01 == -1):
            return 0
        else:
            return 1#返回1是代表成功了
        
    def openJiNeng(self,name):
        """根据技能名字释放技能"""
        self.task = SeerGlobal.get_value('Task')
        if(name == '第五'):
            if(self.task.Fun("0041","0041_3") == 1):#检查第五的图片并点击第五技能
                self.task.Fun("0041","0041_4")
                self.招数ID = self.招数ID + 1
            return 0
        if(name == '切走'):
            if(self.task.Fun("0041","0041_14") == 1):#点击切换精灵
                self.task.Fun("0041","0041_15")
            return 0
        if(name == '喝药'):
            if(self.task.Fun("0041","0041_10") == 1):#点击道具准备喝药
                self.task.Fun("0041","0041_11")
            return 0
        list01 = self.lookJiNeng()
        isHave = False#是否满足条件
        int01 = 0
        for i in list01:
            str01 = i[0]#技能名字
            if(str01.find(name) != -1 and int(i[1])>0):#说明找到了,并且该技能还有PP
                isHave = True
                break
            int01 = int01 + 1
        if(isHave == False):
            return 0
        def findJiNeng(JiNeng):
            x1,y1,x2,y2 = JiNeng
            _dm: DmBase = self.dm
            dm_ret = _dm.findStrFast(x1,y1,x2,y2,name,self.fontColor)
            if(int(dm_ret[0]) != -1):
                _dm.moveTo(int(dm_ret[1]),int(dm_ret[2]))
                _dm.leftClick()
            return dm_ret
        
        if(int01 == 0):
            findJiNeng(区域_第一技能)
        elif(int01 == 1):
            findJiNeng(区域_第二技能)
        elif(int01 == 2):
            findJiNeng(区域_第三技能)
        elif(int01 == 3):
            findJiNeng(区域_第四技能)
        self.招数ID = self.招数ID + 1
        
    def setChuZhao(self):
        """设置循环出招"""
        精灵出招表组 = Get精灵出招表组()
        myName = self.lookMyName()
        isHave = False#是否满足条件
        int01 = 0
        for i in 精灵出招表组:
            if(myName.find(i[0]) != -1 or i[0] == myName):#代表当前的精灵确实存在于出招表
                isHave = True
                break
            int01 = int01 + 1
        if(isHave == False):
            return 0
        list01 = 精灵出招表组[int01]#代表当前精灵的技能列表['王之哈莫',['第五','第五','第五']]
        try:
            jiNeng = list01[1][self.招数ID]#代表下一招的技能名字
            self.openJiNeng(jiNeng)
        except:
            self.招数ID = 0
            jiNeng = list01[1][self.招数ID]#代表下一招的技能名字
            self.openJiNeng(jiNeng)
    
    def setQieHuan(self):
        """当前精灵死亡后是否按出招表的顺序切换下一个精灵"""
        精灵出招表组 = Get精灵出招表组()
        myName = self.lookMyName()
        int01 = 0
        下一只精灵 = []#数组意味着重复精灵出现在出招表
        for i in 精灵出招表组:
            if(myName.find(i[0]) != -1 or myName == i[0]):#如果找到当前的名字
                try:
                    下一只精灵.append(精灵出招表组[int01 + 1][0])
                except:#说明精灵已经到结尾了
                    下一只精灵.append(精灵出招表组[0][0])
            int01 = int01 + 1
        for i in 下一只精灵:
            x01 = self.changeJingLingForName(i)
            if(x01 != 0):
                self.招数ID = 0#恢复出招表
                break
#---------------------------通用型战斗模块--------------
